home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / nos042_s / timed.c < prev    next >
C/C++ Source or Header  |  1994-09-16  |  2KB  |  99 lines

  1. /* Internet Time server
  2.  * Copyright 1993 Mark Turner, G7LEU mt@kram.org
  3.  *
  4.  * ATARI Version by David Nash - dnash@chaos.demon.co.uk
  5.  *
  6.  * don't swap bytes to little endian order 
  7.  */
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include "global.h"
  11. #include "mbuf.h"
  12. #include "socket.h"
  13. #include "session.h"
  14. #include "proc.h"
  15.  
  16. static int Stime = -1;
  17.  
  18. static void __stdargs timed __ARGS((int s,void *unused,void *p));
  19.  
  20. int    timestart(int argc, char *argv[], void *p);
  21. int    time0(int argc, char *argv[], void *p);
  22.  
  23. /* Start up time service */
  24. int
  25. timestart(argc,argv,p)
  26. int argc;
  27. char *argv[];
  28. void *p;
  29. {
  30.     struct sockaddr_in lsocket;
  31.     int s;
  32.  
  33.     if(Stime != -1){
  34.         return 0;
  35.     }
  36.     psignal(Curproc,0);    /* Don't keep the parser waiting */
  37.     chname(Curproc,"Time listener");
  38.  
  39.     lsocket.sin_family = AF_INET;
  40.     lsocket.sin_addr.s_addr = INADDR_ANY;
  41.     if(argc < 2)
  42.         lsocket.sin_port = IPPORT_TIME;
  43.     else
  44.         lsocket.sin_port = atoi(argv[1]);
  45.  
  46.     Stime = socket(AF_INET,SOCK_STREAM,0);
  47.     bind(Stime,(char *)&lsocket,sizeof(lsocket));
  48.     listen(Stime,1);
  49.     for(;;){
  50.         if((s = accept(Stime,NULLCHAR,(int *)NULL)) == -1)
  51.             break;    /* Service is shutting down */
  52.  
  53.         /* Spawn a server */
  54.         newproc("timed",512,timed,s,NULL,NULL,0);
  55.     }
  56.     return 0;
  57. }
  58.  
  59. static void
  60. __stdargs timed(s,unused,p)
  61. int s;
  62. void *unused;
  63. void *p;
  64. {
  65. #ifndef ATARI    
  66.     char t;
  67. #endif
  68.     union
  69.         {
  70.         time_t time;
  71.         char bytes[sizeof (time_t)];
  72.         } result;
  73.     sockmode(s,SOCK_ASCII);
  74.     sockowner(s,Curproc);
  75.     result.time = time(NULL);
  76.     result.time += 2208988800L;
  77. #ifndef ATARI                                
  78.     t = result.bytes[0];                    /* swap to little endian format for pc */
  79.     result.bytes[0] = result.bytes[3];
  80.     result.bytes[3] = t;
  81.     t = result.bytes[1];
  82.     result.bytes[1] = result.bytes[2];
  83.     result.bytes[2] = t;
  84. #endif
  85.     send(s,result.bytes,sizeof (time_t),0);
  86.     close_s(s);
  87. }
  88.  
  89. int
  90. time0(argc,argv,p)
  91. int argc;
  92. char *argv[];
  93. void *p;
  94. {
  95.     close_s(Stime);
  96.     Stime = -1;
  97.     return 0;
  98. }
  99.